package com.example.administrator.xiaoxiang.utils;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

public class RecyclerViewDivider extends RecyclerView.ItemDecoration {
  
    private Paint mPaint;  
    private Drawable mDivider;  
    private int mDividerHeight = 2;//分割线高度，默认为1px  
    private int mOrientation;//列表的方向：LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL  
    private static final int[] ATTRS = new int[]{android.R.attr.listDivider};  
  
    /** 
     * 默认分割线：高度为2px，颜色为灰色 
     * 
     * @param context 
     * @param orientation 列表方向 
     */  
    public RecyclerViewDivider(Context context, int orientation) {  
        if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {  
            throw new IllegalArgumentException("请输入正确的参数！");  
        }  
        mOrientation = orientation;  
  
        final TypedArray a = context.obtainStyledAttributes(ATTRS);  
        mDivider = a.getDrawable(0);  
        a.recycle();  
    }  
  
    /** 
     * 自定义分割线 
     * 
     * @param context 
     * @param orientation 列表方向 
     * @param drawableId  分割线图片 
     */  
    public RecyclerViewDivider(Context context, int orientation, int drawableId) {  
        this(context, orientation);  
        mDivider = ContextCompat.getDrawable(context, drawableId);  
        mDividerHeight = mDivider.getIntrinsicHeight();  
    }  
  
    /** 
     * 自定义分割线 
     * 
     * @param context 
     * @param orientation   列表方向 
     * @param dividerHeight 分割线高度 
     * @param dividerColor  分割线颜色 
     */  
    public RecyclerViewDivider(Context context, int orientation, int dividerHeight, int dividerColor) {  
        this(context, orientation);  
        mDividerHeight = dividerHeight;  
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  
        mPaint.setColor(dividerColor);  
        mPaint.setStyle(Paint.Style.FILL);  
    }  
  
  
    //获取分割线尺寸  
    @Override  
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {  
        super.getItemOffsets(outRect, view, parent, state);  
        outRect.set(0, 0, 0, mDividerHeight);  
    }  
  
    //绘制分割线  
    @Override  
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {  
        super.onDraw(c, parent, state);  
        if (mOrientation == LinearLayoutManager.VERTICAL) {  
            drawVertical(c, parent);  
        } else {  
            drawHorizontal(c, parent);  
        }  
    }  
  
    //绘制横向 item 分割线  
    private void drawHorizontal(Canvas canvas, RecyclerView parent) {  
        final int left = parent.getPaddingLeft();  
        final int right = parent.getMeasuredWidth() - parent.getPaddingRight();  
        final int childSize = parent.getChildCount();  
        for (int i = 0; i < childSize; i++) {  
            final View child = parent.getChildAt(i);  
            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();  
            final int top = child.getBottom() + layoutParams.bottomMargin;  
            final int bottom = top + mDividerHeight;  
            if (mDivider != null) {  
                mDivider.setBounds(left, top, right, bottom);  
                mDivider.draw(canvas);  
            }  
            if (mPaint != null) {  
                canvas.drawRect(left, top, right, bottom, mPaint);  
            }  
        }  
    }  
  
    //绘制纵向 item 分割线  
    private void drawVertical(Canvas canvas, RecyclerView parent) {  
        final int top = parent.getPaddingTop();  
        final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();  
        final int childSize = parent.getChildCount();  
        for (int i = 0; i < childSize; i++) {  
            final View child = parent.getChildAt(i);  
            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();  
            final int left = child.getRight() + layoutParams.rightMargin;  
            final int right = left + mDividerHeight;  
            if (mDivider != null) {  
                mDivider.setBounds(left, top, right, bottom);  
                mDivider.draw(canvas);  
            }  
            if (mPaint != null) {  
                canvas.drawRect(left, top, right, bottom, mPaint);  
            }  
        }  
    }  
}